查看原文
其他

Python爬虫:使用Python动态爬取冯大辉老师微博,再用词云分析

By Python绿色通道 2019-05-24


冯大辉老师在程序员圈子中还是比较出名的,大部分都知道他这个人,性格很鲜明。他现在正在创业,公司叫无码科技,他有一个公众号叫小道消息,新榜给的活跃粉丝是30多万数据,他的微博有180万粉,这说明冯老师在科技界还是很有影响力的。


事情是这样的,上周的一天公众号又照例收到了大辉老师的文章,我就在他的文章底下留言了,说要爬爬他的文章。




这是我用冯老师最近5000多条微博内容做的词云,大家可以围观一下。

之前也写了一篇用python 来爬取朋友的QQ说说,大家也可以围观一下

Python爬虫:动态爬取QQ说说并生成词云,分析朋友状况


好了,开始进入正题:

#coding:utf-8

"""
爬取冯大辉老师的微博
代码都在github上:https://github.com/pythonchannel

"""



import time
from selenium import webdriver
from lxml import etree
import word_cloud_py as wcp
import sys


reload(sys)
#这里需要指定字符编码
sys.setdefaultencoding( "utf-8" )

def get_content(f_name):

   #你的微博帐号
   username = 'xxxx'
   psd = 'xxxx'

   #获取浏览器驱动
   driver = webdriver.Firefox()

   # 浏览器窗口最大化
   driver.maximize_window()

   driver.get('http://weibo.com/login.php')
   print('login............................')

   #给登录框与密码赋值
   driver.find_element_by_id('loginname').send_keys(username)
   driver.find_element_by_class_name('password').find_element_by_name('password').send_keys(psd)

   #点击登录按钮
   driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a/span').click()

   # 这里因为登录,需要有一个延时,不能直接切换到新网页去
   time.sleep(3)

   # 登录成功后,再用浏览器地址定向到大辉老师的微博列表页,没有什么技巧,自己去找的
   driver.get("https://weibo.com/p/1005051577826897/home?from=page_100505_profile&wvr=6&mod=data&is_all=1#place")

   while True:
           # 下拉滚动条,从1开始到3结束 分2次加载完每页数据
           for i in range(1,6):
               height = 20000*i#每次滑动20000像素
               strWord = "window.scrollBy(0,"+str(height)+")"
               driver.execute_script(strWord)
               time.sleep(4)

           selector = etree.HTML(driver.page_source)
           divs = selector.xpath('//*[@id="Pl_Official_MyProfileFeed__22"]/div/div/div[1]/div[4]')

         #  mode =a 不清空连续写入
           with open('{}.txt'.format(f_name),'a') as f:
               for div in divs:
                   wb_content = div.xpath('./div[3]/text()')
                   wb_time = div.xpath('./div[2]/a/text()')
                   wb_content = wb_content[0] if len(wb_content) > 0 else ''
                   wb_time = wb_time[0] if len(wb_time) > 0 else ''
                   wb_content = wb_content.strip()  # 去掉左右两边的空格
                   wb_time = wb_time.strip()
                   print wb_content, wb_time
                   f.write(wb_content+'\n')

           #分析得知当为最后一页时,最后的page next S_txt1 S_line1不见了
           if driver.page_source.find('page next S_txt1 S_line1') == -1:
               print '没有下一页了'
               break

           # 找到“下一页”的按钮元素,原本想用xpath与classname,都失败了
           # 这里我是用css来定位的,page next S_txt1 S_line1 在空格之间加'.' 来连接
           submit = driver.find_element_by_css_selector('.page.next.S_txt1.S_line1')
           submit.click()

if __name__ == '__main__':
   f_name = 'ddddd'
   get_content(f_name)
   wcp.create_word_cloud(f_name)

特别注意一下,生成词云的代码在github上word_cloud_py文件中,调用方法就行了。

其它补充的文字也没有什么要说的,注释都在代码中,接下来要使用Scrapy爬虫框架了,虽然快过年了,但学习还是不能停下来。


另外:回复关键词:京东图书评价,获取京东图书评论内容,看看一本图书是否值得购买。



推荐阅读:

Python爬虫:把爬取到的数据插入到execl中

Python爬虫:现学现用xpath爬取豆瓣音乐

Python爬虫系列:用邮件来通知爬虫异常状况

Python爬虫学前普及


您的Python之旅

长按,识别二维码,加关注

长按,打赏一下



目前100000+人已关注加入我们

       

       



关注微信公众号(Python绿色通道)即可领取5T学习资料: 数据结构, 小程序, 前端, PHP, Java ,Android, Python, 大数据, 人工智能等!


公众号后台回复 红包,获取福利。


最后 :大家也可以加我个人微信:hg_liuzl,  注明:Python学习,拉你进群学习,一个纯粹的Python学习环境





    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存